package CamposDePotencial;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.vecmath.Point3d;

import estrategia.ParametrosPotenciales;
import estrategia.Predictor;
import estrategia.Utiles;
import estrategia.Vector;

public class CampoCircularAtractor extends CampoPotencial{

	private double Katraccion;
	private double radioAtraccionConica;
	
	private Objetivo objetivo;
	
	public CampoCircularAtractor(Objetivo objetivo, Utiles u, Predictor p) {
		// TODO Auto-generated constructor stub
		super(objetivo.getIdObjetivo(), u, p);
		this.objetivo = objetivo;
	}
	
	
	public void  cargarConstantes() {
		Katraccion = ParametrosPotenciales.KCampoAtraccionCircular;
		radioAtraccionConica = ParametrosPotenciales.radioCampoAtractor;
	}
	
	
	public double evaluarCircunferencia(Point3d posObjeto, Point3d posRobot) {
		double valor = Math.pow((posRobot.x - posObjeto.x), 2) + Math.pow((posRobot.y - posObjeto.y), 2); 
		return Math.sqrt(valor); 
	}
	
	
	public double getMagnitudFuerza(Point3d mipos, Point3d posObj) {
		double distancia = utiles.distanciaEuclidea(mipos, posObj);
		double magnitud = Katraccion*(Math.pow(distancia, 2));
		
		return magnitud;
	}
	
	
	public Vector obtenerFuerza(Point3d mipos) throws IOException{
		cargarConstantes();
		
		Point3d puntoCampo = new Point3d();
		puntoCampo = objetivo.getPosicionObjetivo(); 
		
		double direccion = utiles.getAnguloTheta(mipos, puntoCampo);
		
		double magnitud = getMagnitudFuerza(mipos, puntoCampo);
		
		//System.out.println("La direccion del atractor es = " + direccion + " y la magnitud es: " + magnitud);
		 
		Vector resultante = new Vector(magnitud, direccion);
		
		resultante.setMagnitud(Math.abs(magnitud));
		
		return resultante;
	}
}

